package handlers

import (
	"fmt"
	"log"
	"os"
	"strings"

	"github.com/eatmoreapple/openwechat"
	"github.com/hollson/wxbot/gpt"
	"github.com/hollson/wxbot/utils"
)

// 用户私信处理

var _ MessageHandlerInterface = (*UserMessageHandler)(nil)

// UserMessageHandler 私聊消息处理
type UserMessageHandler struct{}

// handle 处理消息
func (h *UserMessageHandler) handle(msg *openwechat.Message) error {
	u, _ := msg.Sender()
	log.Printf("Received[%v] : %v", u.NickName, msg.Content)

	if msg.IsText() && utils.PrefixAny(msg.Content, "ping", "在吗", "你好", "干嘛呢", "干什么呢") {
		msg.ReplyText(fmt.Sprintf("[🤖]你好%v,很高兴为您服务!", u.NickName))
		return nil
	}

	if msg.IsText() {
		return h.ReplyText(msg)
		// msg.ReplyText("OK")
		// return nil
	}

	if msg.IsVideo() {
		fmt.Println(msg.VoiceLength)
		fmt.Println(msg.Content)
		// os.Create("a.mp4")
		// msg.Raw

		err := os.WriteFile("audio.mp4", msg.Raw, 0644)
		if err != nil {
			panic(err)
		}
		msg.ReplyText("已经保存语音文件")
		// msg.ReplyVideo()
		// msg.AppInfo
	}
	// msg.IsTransferAccounts()
	return nil
}

// NewUserMessageHandler 创建私聊处理器
func NewUserMessageHandler() MessageHandlerInterface {
	return &UserMessageHandler{}
}

// ReplyText 发送文本消息到群
func (h *UserMessageHandler) ReplyText(msg *openwechat.Message) error {
	// 接收私聊消息
	sender, err := msg.Sender()
	log.Printf("Received User %v Text Msg : %v", sender.NickName, msg.Content)

	// 向GPT发起请求
	requestText := strings.TrimSpace(msg.Content)
	requestText = strings.Trim(msg.Content, "\n")
	reply, err := gpt.Completions(requestText)
	if err != nil {
		log.Printf("gtp request error: %v \n", err)
		// msg.ReplyText("你个哈卵，慢点搞，我脑袋转不过来了。")
		return err
	}
	if reply == "" {
		return nil
	}

	// 回复用户
	reply = strings.TrimSpace(reply)
	reply = strings.Trim(reply, "\n")
	_, err = msg.ReplyText(reply)
	if err != nil {
		log.Printf("response user error: %v \n", err)
	}
	return err
}
